﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Interfaces;
using Repository;
using Entities;

namespace Business
{
    public class UsersBusinessLogic
    {
        UserRepository user_repos = new UserRepository();
        RoleRepository role_repos = new RoleRepository();

        public UsersBusinessLogic()
        {
        }

        /// <summary>
        /// Загружает пользователя из базы данных
        /// </summary>
        /// <param name="id">id пользователя</param>
        /// <returns>Объект класса User, загруженный из базы, или, если не удалось - null</returns>
        public User GetUser(int id)
        {
            return (User)user_repos.GetAllObjects()[id];
        }

        /// <summary>
        /// Загружает пользователя из базы данных
        /// </summary>
        /// <param name="login">login пользователя</param>
        /// <returns>Объект класса User, загруженный из базы, или, если не удалось - null</returns>
        public User GetUser(string login)
        {
            return (User)user_repos.GetAllObjects()[GetUserID(login)];
        }

        /// <summary>
        /// Получает id пользователя из базы данных
        /// </summary>
        /// <param name="login">Login пользователя</param>
        /// <returns>Id пользователя, или, если пользователь не найден -1</returns>
        public int GetUserID(string login)
        {
            return user_repos.GetUserID(login);
        }

        /// <summary>
        /// Проверяет, существует ли пользователь в базе данных
        /// </summary>
        /// <param name="id">ID пользователя</param>
        /// <returns></returns>
        public bool UserExists(int id)
        {
            return user_repos.UserExists(id);
        }

        /// <summary>
        /// Проверяет, существует ли пользователь в базе данных
        /// </summary>
        /// <param name="login">Login пользователя</param>
        /// <returns></returns>
        public bool UserExists(string login)
        {
            return user_repos.UserExists(login);
        }

        /// <summary>
        /// Получает список доступных ролей
        /// </summary>
        /// <returns>массив строк - доступных ролей, либо null, если загрузить не удалось</returns>
        public List<Role> GetRolesList()
        {
            return role_repos.GetAllObjects().Values.Select((rec) => ((Role)rec)).ToList();
        }

        public void AddUser(User src)
        {
            user_repos.GetAllObjects()[src.ID] = src;
            user_repos.Go();
        }
    }
}
